package com.hello.system.domain;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.hello.common.core.annotation.Excel;
import com.hello.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 鱼类检测结果详情对象 fish_detection_result
 * 
 * @author hello
 * @date 2025-09-11
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class FishDetectionResult extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 结果ID */
    private Long resultId;

    /** 视频ID */
    @Excel(name = "视频ID")
    private Long videoId;

    /** 模型ID */
    @Excel(name = "模型ID")
    private Long modelId;

    /** 检测批次ID(用于标识同一次检测会话) */
    @Excel(name = "检测批次ID(用于标识同一次检测会话)")
    private String detectionBatchId;

    /** 视频帧ID */
    @Excel(name = "视频帧ID")
    private Long frameId;

    /** 检测时间戳 */
    @Excel(name = "检测时间戳")
    private Long detectionTime;

    /** 本次检测使用的置信度阈值 */
    @Excel(name = "本次检测使用的置信度阈值")
    private BigDecimal confidenceThreshold;

    /** 检测会话开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "检测会话开始时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date sessionStartTime;

    /** 检测置信度 */
    @Excel(name = "检测置信度")
    private BigDecimal confidence;

    /** 置信度等级(低/中/高/极高) */
    @Excel(name = "置信度等级(低/中/高/极高)")
    private String confidenceLevel;

    /** 检测质量(一般/良好/优秀) */
    @Excel(name = "检测质量(一般/良好/优秀)")
    private String detectionQuality;

    /** 边界框X坐标 */
    @Excel(name = "边界框X坐标")
    private Long bboxX;

    /** 边界框Y坐标 */
    @Excel(name = "边界框Y坐标")
    private Long bboxY;

    /** 边界框宽度 */
    @Excel(name = "边界框宽度")
    private Long bboxWidth;

    /** 边界框高度 */
    @Excel(name = "边界框高度")
    private Long bboxHeight;

    /** 中心点X坐标 */
    @Excel(name = "中心点X坐标")
    private Long centerX;

    /** 中心点Y坐标 */
    @Excel(name = "中心点Y坐标")
    private Long centerY;

    /** 边界框面积 */
    @Excel(name = "边界框面积")
    private Long bboxArea;

    /** 长宽比 */
    @Excel(name = "长宽比")
    private BigDecimal aspectRatio;

    /** 鱼类物种 */
    @Excel(name = "鱼类物种")
    private String species;

    /** 物种类别 */
    @Excel(name = "物种类别")
    private String speciesCategory;

    /** 估算体长(cm) */
    @Excel(name = "估算体长(cm)")
    private BigDecimal estimatedLength;

    /** 估算体高(cm) */
    @Excel(name = "估算体高(cm)")
    private BigDecimal estimatedHeight;

    /** 估算体重(g) */
    @Excel(name = "估算体重(g)")
    private BigDecimal estimatedWeight;

    /** 尺寸检测置信度 */
    @Excel(name = "尺寸检测置信度")
    private String sizeConfidence;

    /** 估算年龄(岁) */
    @Excel(name = "估算年龄(岁)")
    private Long estimatedAge;

    /** 生长阶段(幼鱼/成鱼/大型成鱼) */
    @Excel(name = "生长阶段(幼鱼/成鱼/大型成鱼)")
    private String ageStage;

    /** 健康状态(健康/一般/异常) */
    @Excel(name = "健康状态(健康/一般/异常)")
    private String healthStatus;

    /** 体况系数(肥满度) */
    @Excel(name = "体况系数(肥满度)")
    private BigDecimal conditionFactor;

    /** 活动状态(游泳/觅食/休息/追逐) */
    @Excel(name = "活动状态(游泳/觅食/休息/追逐)")
    private String activity;

    /** 当前游速(m/s) */
    @Excel(name = "当前游速(m/s)")
    private BigDecimal estimatedSpeed;

    /** 最大游速(cm/s) */
    @Excel(name = "最大游速(cm/s)")
    private BigDecimal maxSwimSpeed;

    /** 游泳朝向(度) */
    @Excel(name = "游泳朝向(度)")
    private BigDecimal orientation;

    /** 游泳方向(向左/向右/向上/向下) */
    @Excel(name = "游泳方向(向左/向右/向上/向下)")
    private String direction;

    /** 扩展信息(JSON格式) */
    @Excel(name = "扩展信息(JSON格式)")
    private String additionalInfo;

    public void setResultId(Long resultId) 
    {
        this.resultId = resultId;
    }

    public Long getResultId() 
    {
        return resultId;
    }
    public void setVideoId(Long videoId) 
    {
        this.videoId = videoId;
    }

    public Long getVideoId() 
    {
        return videoId;
    }
    public void setModelId(Long modelId) 
    {
        this.modelId = modelId;
    }

    public Long getModelId() 
    {
        return modelId;
    }
    public void setDetectionBatchId(String detectionBatchId) 
    {
        this.detectionBatchId = detectionBatchId;
    }

    public String getDetectionBatchId() 
    {
        return detectionBatchId;
    }
    public void setFrameId(Long frameId) 
    {
        this.frameId = frameId;
    }

    public Long getFrameId() 
    {
        return frameId;
    }
    public void setDetectionTime(Long detectionTime) 
    {
        this.detectionTime = detectionTime;
    }

    public Long getDetectionTime() 
    {
        return detectionTime;
    }
    public void setConfidenceThreshold(BigDecimal confidenceThreshold) 
    {
        this.confidenceThreshold = confidenceThreshold;
    }

    public BigDecimal getConfidenceThreshold() 
    {
        return confidenceThreshold;
    }
    public void setSessionStartTime(Date sessionStartTime) 
    {
        this.sessionStartTime = sessionStartTime;
    }

    public Date getSessionStartTime() 
    {
        return sessionStartTime;
    }
    public void setConfidence(BigDecimal confidence) 
    {
        this.confidence = confidence;
    }

    public BigDecimal getConfidence() 
    {
        return confidence;
    }
    public void setConfidenceLevel(String confidenceLevel) 
    {
        this.confidenceLevel = confidenceLevel;
    }

    public String getConfidenceLevel() 
    {
        return confidenceLevel;
    }
    public void setDetectionQuality(String detectionQuality) 
    {
        this.detectionQuality = detectionQuality;
    }

    public String getDetectionQuality() 
    {
        return detectionQuality;
    }
    public void setBboxX(Long bboxX) 
    {
        this.bboxX = bboxX;
    }

    public Long getBboxX() 
    {
        return bboxX;
    }
    public void setBboxY(Long bboxY) 
    {
        this.bboxY = bboxY;
    }

    public Long getBboxY() 
    {
        return bboxY;
    }
    public void setBboxWidth(Long bboxWidth) 
    {
        this.bboxWidth = bboxWidth;
    }

    public Long getBboxWidth() 
    {
        return bboxWidth;
    }
    public void setBboxHeight(Long bboxHeight) 
    {
        this.bboxHeight = bboxHeight;
    }

    public Long getBboxHeight() 
    {
        return bboxHeight;
    }
    public void setCenterX(Long centerX) 
    {
        this.centerX = centerX;
    }

    public Long getCenterX() 
    {
        return centerX;
    }
    public void setCenterY(Long centerY) 
    {
        this.centerY = centerY;
    }

    public Long getCenterY() 
    {
        return centerY;
    }
    public void setBboxArea(Long bboxArea) 
    {
        this.bboxArea = bboxArea;
    }

    public Long getBboxArea() 
    {
        return bboxArea;
    }
    public void setAspectRatio(BigDecimal aspectRatio) 
    {
        this.aspectRatio = aspectRatio;
    }

    public BigDecimal getAspectRatio() 
    {
        return aspectRatio;
    }
    public void setSpecies(String species) 
    {
        this.species = species;
    }

    public String getSpecies() 
    {
        return species;
    }
    public void setSpeciesCategory(String speciesCategory) 
    {
        this.speciesCategory = speciesCategory;
    }

    public String getSpeciesCategory() 
    {
        return speciesCategory;
    }
    public void setEstimatedLength(BigDecimal estimatedLength) 
    {
        this.estimatedLength = estimatedLength;
    }

    public BigDecimal getEstimatedLength() 
    {
        return estimatedLength;
    }
    public void setEstimatedHeight(BigDecimal estimatedHeight) 
    {
        this.estimatedHeight = estimatedHeight;
    }

    public BigDecimal getEstimatedHeight() 
    {
        return estimatedHeight;
    }
    public void setEstimatedWeight(BigDecimal estimatedWeight) 
    {
        this.estimatedWeight = estimatedWeight;
    }

    public BigDecimal getEstimatedWeight() 
    {
        return estimatedWeight;
    }
    public void setSizeConfidence(String sizeConfidence) 
    {
        this.sizeConfidence = sizeConfidence;
    }

    public String getSizeConfidence() 
    {
        return sizeConfidence;
    }
    public void setEstimatedAge(Long estimatedAge) 
    {
        this.estimatedAge = estimatedAge;
    }

    public Long getEstimatedAge() 
    {
        return estimatedAge;
    }
    public void setAgeStage(String ageStage) 
    {
        this.ageStage = ageStage;
    }

    public String getAgeStage() 
    {
        return ageStage;
    }
    public void setHealthStatus(String healthStatus) 
    {
        this.healthStatus = healthStatus;
    }

    public String getHealthStatus() 
    {
        return healthStatus;
    }
    public void setConditionFactor(BigDecimal conditionFactor) 
    {
        this.conditionFactor = conditionFactor;
    }

    public BigDecimal getConditionFactor() 
    {
        return conditionFactor;
    }
    public void setActivity(String activity) 
    {
        this.activity = activity;
    }

    public String getActivity() 
    {
        return activity;
    }
    public void setEstimatedSpeed(BigDecimal estimatedSpeed) 
    {
        this.estimatedSpeed = estimatedSpeed;
    }

    public BigDecimal getEstimatedSpeed() 
    {
        return estimatedSpeed;
    }
    public void setMaxSwimSpeed(BigDecimal maxSwimSpeed) 
    {
        this.maxSwimSpeed = maxSwimSpeed;
    }

    public BigDecimal getMaxSwimSpeed() 
    {
        return maxSwimSpeed;
    }
    public void setOrientation(BigDecimal orientation) 
    {
        this.orientation = orientation;
    }

    public BigDecimal getOrientation() 
    {
        return orientation;
    }
    public void setDirection(String direction) 
    {
        this.direction = direction;
    }

    public String getDirection() 
    {
        return direction;
    }
    public void setAdditionalInfo(String additionalInfo) 
    {
        this.additionalInfo = additionalInfo;
    }

    public String getAdditionalInfo() 
    {
        return additionalInfo;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("resultId", getResultId())
            .append("videoId", getVideoId())
            .append("modelId", getModelId())
            .append("detectionBatchId", getDetectionBatchId())
            .append("frameId", getFrameId())
            .append("detectionTime", getDetectionTime())
            .append("confidenceThreshold", getConfidenceThreshold())
            .append("sessionStartTime", getSessionStartTime())
            .append("confidence", getConfidence())
            .append("confidenceLevel", getConfidenceLevel())
            .append("detectionQuality", getDetectionQuality())
            .append("bboxX", getBboxX())
            .append("bboxY", getBboxY())
            .append("bboxWidth", getBboxWidth())
            .append("bboxHeight", getBboxHeight())
            .append("centerX", getCenterX())
            .append("centerY", getCenterY())
            .append("bboxArea", getBboxArea())
            .append("aspectRatio", getAspectRatio())
            .append("species", getSpecies())
            .append("speciesCategory", getSpeciesCategory())
            .append("estimatedLength", getEstimatedLength())
            .append("estimatedHeight", getEstimatedHeight())
            .append("estimatedWeight", getEstimatedWeight())
            .append("sizeConfidence", getSizeConfidence())
            .append("estimatedAge", getEstimatedAge())
            .append("ageStage", getAgeStage())
            .append("healthStatus", getHealthStatus())
            .append("conditionFactor", getConditionFactor())
            .append("activity", getActivity())
            .append("estimatedSpeed", getEstimatedSpeed())
            .append("maxSwimSpeed", getMaxSwimSpeed())
            .append("orientation", getOrientation())
            .append("direction", getDirection())
            .append("additionalInfo", getAdditionalInfo())
            .toString();
    }
}
